package com.cskaoyan.javase.exercise6;

/**
 * @description: 练习2
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 *  byte b = 130;
 *  这句代码有没有问题？
 * 如有问题，咋整？
 * 需要强制转换为byte
 * 强制转换的快捷键
 *
 * 计算机的二进制计算是什么过程：
 *  1，计算都是以补码的形式进行的
 *  原码，反码，补码
 *  - 原码
 *   - 有效数字是其绝对值的二进制表示
 *   - 最高位负数是0，正数是1
 *   - 有效数字和最高位之间用0补充
 *   - 除了最高位符号位外，其余位置都是数值位
 * - 反码
 *   - 正数的反码与原码相同
 *   - 负数的反码是对其原码逐位取反，符号位除外
 * - 补码
 *   - 正数的补码与原码相同
 *   - 负数的补码是在其反码上加1
 *   - 反码+1=补码
 *   - 反码=补码-1
 *
 *  4个字节。32位
 *  int 130的原码： 130--->二进制 128+2 = 00000000 00000000 00000000 10000010
 *  130的补码参与运算：00000000 00000000 00000000 10000010
 *  byte只有一个字节，只有8位 于是强转的过程必须要截断这个32位的补码
 *  截断后的补码： 10000010
 *  补码--->原码--->十进制数
 *  补码--->反码
 *  补码=反码+1
 *  10000010 + 1 = 10000011（反码）
 *  反码转换成原码 = 11111100（原码）
 *  二进制原码--->十进制数 = -(4+8+16+32+64)
 *
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        byte b = ((byte) 130);
        System.out.println(b); //-126
        System.out.println(0B10000010);
        System.out.println(-(2+4+8+16+32+64));
    }
}
